public class code2 {

    // 牛客 top 101 优先级队列找到数组中的最小 k 个数

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param input int整型一维数组
     * @param k int整型
     * @return int整型ArrayList
     */

    // 解法一：直接使用一个优先级队列存储数据，将数据排序
    public ArrayList<Integer> GetLeastNumbers_Solution (int[] input, int k) {
        // write code here

        // 创建出一个 顺序表，用来存储这里的最小 k 个数
        ArrayList<Integer> list = new ArrayList<>();
        int flag = 0;

        // 处理数组存在异常的情况
        if(input.length < k || k == 0) {
            return list;
        }
        // 创建出一个优先级队列，在其中存储指定的 k 个值
        PriorityQueue<Integer> que = new PriorityQueue<>();

        // 通过遍历数组，简单的实现筛选操作
        for(int i = 0; i < input.length; i++) {
            que.offer(input[i]);
        }

        // 循环完数组后，将优先级队列中的值存储到顺序表中进行返回
        while(flag < k) {
            list.add(que.poll());
            flag++;
        }
        return list;
    }
}
